#include <cstdio>
#include <cstring>

#define LIM 1000000000

struct BigInteger {
	int digit[60];
	int n;
	BigInteger(): n(0) { }
	void print() {
		printf("%d", digit[n-1]);
		for (int i=n-2; i>=0; i--) {
			printf("%09d", digit[i]);
		}
	}
};

BigInteger operator + (BigInteger& lhs, BigInteger& rhs) {
	BigInteger result;
	int i = 0;
	int ac = 0;
	while (i<lhs.n || i<rhs.n || ac) {
		int tmp;
		if (i<lhs.n && i<rhs.n) {
			tmp = lhs.digit[i] + rhs.digit[i] + ac;
		} else if (i<lhs.n) {
			tmp = lhs.digit[i] + ac;
		} else if (i<rhs.n) {
			tmp = rhs.digit[i] + ac;
		} else {
			tmp = ac;
		}
		if (tmp >= LIM) ac = 1;
		else ac = 0;
		result.digit[i] = tmp % LIM;
		result.n++;
		i++;
	}
	return result;
}

char buf[510];

BigInteger parseBI(char *buf) {
	BigInteger bi;
	int len1 = strlen(buf);
	int i = len1;
	int cnt = 0;
	while (i > 0) {
		if (i-9 >= 0) {
			int a = 0;
			int r = 1;
			for (int j=i-1; j>=i-9; j--) {
				a += (buf[j]-'0') * r;
				r *= 10;
			}
			bi.digit[cnt] = a;
			cnt++;
			i -= 9;
		} else {
			int a = 0;
			int r = 1;
			for (int j=i-1; j>=0; j--) {
				a += (buf[j]-'0') * r;
				r *= 10;
			}
			bi.digit[cnt] = a;
			cnt++;
			i = 0;
		}
	}
	bi.n = cnt;
	i = cnt-1;
	while (bi.digit[i--] == 0) {
		bi.n--;
	}
	return bi;
}

int main() {
	BigInteger bi1, bi2, sum;
	scanf("%s", buf);
	bi1 = parseBI(buf);
	scanf("%s", buf);
	bi2 = parseBI(buf);
	sum = bi1 + bi2;
	sum.print();
	printf("\n");
	return 0;
}
